import sm2 from 'sm-crypto';

class SM2Service {
  // 生成SM2密钥对
  static generateKeyPair() {
    const keyPair = sm2.generateKeyPairHex();
    return {
      privateKey: keyPair.privateKey, // 私钥
      publicKey: keyPair.publicKey // 公钥
    };
  }
  
  // 使用公钥加密数据
  static encrypt(data, publicKey) {
    // 确保数据是字符串
    const dataString = typeof data === 'string' ? data : JSON.stringify(data);
    
    // 使用SM2公钥加密
    const encrypted = sm2.doEncrypt(dataString, publicKey, 0);
    
    return encrypted;
  }
  
  // 使用私钥解密数据
  static decrypt(encryptedData, privateKey) {
    try {
      // 使用SM2私钥解密
      const decrypted = sm2.doDecrypt(encryptedData, privateKey, 0);
      
      return decrypted;
    } catch (error) {
      console.error('SM2解密错误:', error);
      throw new Error('解密失败');
    }
  }
  
  // 数字签名
  static sign(data, privateKey) {
    // 确保数据是字符串
    const dataString = typeof data === 'string' ? data : JSON.stringify(data);
    
    // 使用SM2私钥签名
    const signature = sm2.doSignature(dataString, privateKey, { der: false });
    
    return signature;
  }
  
  // 验证数字签名
  static verify(data, signature, publicKey) {
    // 确保数据是字符串
    const dataString = typeof data === 'string' ? data : JSON.stringify(data);
    
    // 验证SM2签名
    const isValid = sm2.doVerifySignature(dataString, signature, publicKey, { der: false });
    
    return isValid;
  }
}

export default SM2Service;